﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Core;
using Crosland.Automotriz.Data.Dao.Linq;
using Crosland.Automotriz.Logic.Funciones;
using Crosland.Automotriz.Entidad;
using Crosland.Automotriz.Logic.ControlExeption;
using System.Data.SqlClient;
namespace Crosland.Automotriz.Logic.Linq
{
    public class ActualizarPedidoLogic
    {

        clsTh_pedido_Imp_cabDAO datosCab = new clsTh_pedido_Imp_cabDAO();
        clsTh_pedido_imp_detDAO datosDet = new clsTh_pedido_imp_detDAO();


        public bool Actualizar_Cantidad_Sugerida_Real(int Nro_Pedido, int id_material, decimal qt_Cant_Sug_real)
        {
            try
            {
                datosDet.Actualizar_Cantidad_Sugerida_Real(Nro_Pedido, id_material, qt_Cant_Sug_real);
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }
        public bool Actualiza_Estado(int nu_pedido, int id_estado)
        {
            try
            {
                datosCab.Actualiza_Estado(nu_pedido, id_estado);
                return true;
            }
            catch
            {
                return false;
            }

        }

        public bool Insertar(TH_PRONOSTICO_IMP_CAB Obj, List<TH_PRONOSTICO_IMP_DET> Objdet)
        {
            try
            {
                foreach (TH_PRONOSTICO_IMP_DET d in Objdet)
                {
                    Obj.TH_PRONOSTICO_IMP_DET.Add(d);
                }

                datosCab.Insertar(Obj);
                return true;
            }

            catch
            {
                return false;
            }

        }

        public bool Modicar(TH_PRONOSTICO_IMP_CAB obj, TH_PRONOSTICO_IMP_DET Objdet)
        {
            return true;
        }
        public bool ModicarDet(V_UPDATE_PRONOSTICO_IMP_DET Objdet)
        {
            return datosDet.Modificar(Objdet);
        }

        public bool Eliminar(TH_PRONOSTICO_IMP_CAB obj, TH_PRONOSTICO_IMP_DET Objdet)
        {
            return true;
        }
        public List<V_PRONOSTICO_IMP_CAB> listarCab()
        {
            return datosCab.listar();
        }

        public List<V_PRONOSTICO_IMP_CAB> listarCab_Filtro(int nu_anio, int nu_estado)
        {
            var c = from p in datosCab.listar()
                    where p.FECHA_GEN.Year == nu_anio && p.ID_ESTADO == nu_estado
                    select p;

            return c.ToList();
        }

        public List<V_PRONOSTICO_IMP_CAB> listarCabSeguimientoImpPopBuscar(int anio, int id_estado)
        {
            return datosCab.listarCabSeguimientoImpPopBuscar(anio, id_estado);
        }

        public IEnumerable<Object> listarCabSeguimientoImpPopBuscar2( int id_estado)
        {
            return datosCab.listarCabSeguimientoImpPopBuscar2(id_estado);
        }

        public List<V_PRONOSTICO_IMP_CAB> listarCabSeguimientoImpPopBuscarxFechaPedido(DateTime? dtmFechaPedido, int? id_estado, int intCantLimite)
        {
            return datosCab.listarCabSeguimientoImpPopBuscarxFechaPedido(dtmFechaPedido, id_estado, intCantLimite);
        }

        public List<V_PRONOSTICO_IMP_DET_BE> listar(int nu_pedido)
        {
            try
            {
                if (datosDet.listar(nu_pedido).Count() == 0)
                    throw new DataException("No hay datos en el detalle  con nro.Pronóstico Enviado");

                return datosDet.listar(nu_pedido);            
            }
            catch (SqlException sqlex) {

                throw new DataException("Error en el Procedimiento (USP_V_PRONOSTICO_IMP_DET_LISTAR)", sqlex);            
            }
            catch (Exception ex)
            {
                throw new RunException("Error al listar el detalle de importación", ex);
            } 
        }

        public List<T_PRONOSTICO_VENTA_EN> ListarPronostico(int NPronostico, int IdMaterial)
        {
            try
            {
                return datosDet.ListarPronostico(NPronostico, IdMaterial);
            }
            catch (Exception ex)
            {                
                throw new RunException("Error al listar pronóstico",ex);
            }     
        }

        public IEnumerable<Object> Listar_cabecera(int nu_anio, int nu_estado)
        {
            try
            {
                return datosCab.Listar_cabecera(nu_anio, nu_estado);
            }
            catch (Exception ex)
            {

                throw new RunException("Error al listar pronóstico", ex);
            }

           

        }



        public IEnumerable<Object> Listar_cabeceraPorAprobar(int nu_anio, int nu_estado, String strIdUsuario)
        {

            try
            {
                return datosCab.Listar_cabeceraPorAprobar(nu_anio, nu_estado, strIdUsuario);
            }
            catch (Exception ex)
            {

                throw new RunException("Error al listar pronóstico", ex);
            }
        }


        public IEnumerable<Object> Listar_cabeceraPorConfirmar(int nu_anio, int nu_estado, String strIdUsuario)
        {

            try
            {
                return datosCab.Listar_cabeceraPorConfirmar(nu_anio, nu_estado, strIdUsuario);
            }
            catch (Exception ex)
            {

                throw new RunException("Error al listar pronóstico", ex);
            }
        }

        public int UltimoNumero()
        {
            return datosCab.UltimoNumero();
        }

        public List<V_PRONOSTICO_IMP_DET> ListaCargaExterno(int nu_pedido)
        {
            return datosDet.ListaCargaExterno(nu_pedido);
        }
        
        public List<V_PRONOSTICO_IMP_DET> ListaCargaExterno(int intNumPedido, int intIdOrgVta)
        {
            return datosDet.ListaCargaExterno(intNumPedido, intIdOrgVta);
        }

        public int ListarTextoTotal(int NPronostico, int IdMaterial)
        {
            return datosDet.ListarTextoTotal(NPronostico, IdMaterial);
        }
        public int PronosticoImportacionNroDiasReposicion(int nroPronostico, String tipoABC)
        {
            return datosDet.PronosticoImportacionNroDiasReposicion(nroPronostico,tipoABC);
        
        }
        public int countflag(int NPronostico, int IdMaterial)
        {
            return datosDet.countflag(NPronostico, IdMaterial);
        }
        public int obtenerMeses(string nro_pronostico)
        {
            return datosDet.obtenerMeses( nro_pronostico);
        }
        public double total_general(int nroPronostico, int id_material)
        {
            return datosDet.total_general(nroPronostico, id_material);
        }

        public decimal can_vta(int nroPronostico, int id_material)
        {
            return datosDet.can_vta(nroPronostico, id_material);
        }

        public decimal CANT_NO_ATE(int nroPronostico, int id_material)
        {
            return datosDet.CANT_NO_ATE(nroPronostico, id_material);
        }

        public decimal totalCNO(int nroPronostico, int id_material)
        {
            return datosDet.totalCNO(nroPronostico, id_material);
        }

        public IEnumerable<Object> listaPedidosHerramientas(int nro_pronostico)
        {
            try
            {
                return datosDet.listaPedidosHerramientas(nro_pronostico);
            }
            catch (Exception ex)
            {

                throw new RunException("Error al listar datos de pedidos herramientas ",ex) ;
            }           

        }

        public IEnumerable<Object> listaPedidosRepuestos(int nro_pronostico)
        {
            try
            {
                return datosDet.listaPedidosRepuestos(nro_pronostico);
            }
            catch (Exception e)
            {
                
                throw new RunException("Error al listar pedidos Repuestos",e);
            }
         

        }

    }
}
